# 内置函数
"""
第1组
abs()           绝对值
pow()           计算次方
n ** M          计算次方
sun()           求和
divmod()        两个数相除得到商和余
round()         保留小数后几位（四舍五入）

第2组
min()           取最小值
max()           取最大值
all*()          监测元素是否都是True，只要有一个为False就都是False
any()           只要一个为True，返回的就是True

第3组
bin(x):将整数转换为二进制字符串
oct(x):将整数转换为八进制字符串
hex(x):将整数转换为十六进制字符串
int(x):将x转化为一个整数
float(x):将x转化为一个浮点数
str(x):将x转化为字符串
bool(x):将x转化为布尔
str(x):将x转化为一个字符串
chr(x):将整数x转化为一个unicode表中的字符
ord(x):将一个unicode表中的字符x转换为其对应的整数值
bytes(x, encoding=):将x转化为字节类型

callable:是否可以执行
enumerate(x,start=):在循环的过程中自动生成一列,start默认值为0
sorted(x, reverse=True):排序,生成一个新的值不改变原来的值,reverse:True从大到小 False:从小到大

# eval函数：去掉字符串最外层的引号后,并按照python语句方式执行去掉引号后的字符串
# 经常与input函数一起使用,经过eval后就不是字符串了，而就变成整数了
s1 = "'3.15+3'"
s2 = "3.15+3"
print(eval(s1), eval(s2))
"""
print("-" * 50, "callable", "-" * 50)
def fun():
    print("执行函数", end="\t")
lst = ["紫嫣", "嫣然", "萌萌", "姜婉云", fun]
# 如果是函数就执行，不是就打印
for item in lst:
    if callable(item):
        item()
    else:
        print(item, end="\t")
print()


print("-" * 50, "enumerate", "-" * 50)
for index, item in enumerate(lst, start=2):
    print(index, item, end="\t")
print()


print("-" * 50, "sorted", "-" * 50)
lst = [10, 11, 2, 15, 102, 6, 1]
new_lst = sorted(lst)
print("sorted排序：", new_lst)
lst = ["1.紫嫣", "2.嫣然", "3.萌萌", "10.叶轻舞", "4.姜婉云"]
# 自定义排序
def my_sort(s):
    return int(s.split(".")[0])
v = sorted(lst, key=my_sort)
print("原列表：", lst)
print("sorted自定义排序：", v)

v = sorted(lst, key=lambda x: int(x.split(".")[0]))
print("原列表：", lst)
print("sorted自定义匿名排序：", v)

print("-" * 50, "eval函数", "-" * 50)
# 示例
# 没有加eval
# num1 = input("请输入第一个数：")
# num2 = input("请输入第二个数：")
# print(num1 + num2)
# num3 = eval(input("请输入第一个数："))
# num4 = eval(input("请输入第二个数："))
# print(num3 + num4)

# 去掉引号之后的就是helo变量，输出的还是hello
# hello = "hello"
# print(eval(hello))
# 这样程序就会报错，因为去掉引号后的背景是一个变量，而变量背景没有被定义
# print(eval("背景"))
